Oracle 分析函数over,列转行函数pivot理解及综合运用(报表中的小计和合计) |
您所在的位置:网站首页 › oracle 列转行 › Oracle 分析函数over,列转行函数pivot理解及综合运用(报表中的小计和合计) |
1、Over函数(分析统计函数)
1.1语法 sum/avg/count() over(partition by ..) over()在什么条件之上;partition by 按哪个字段划分组;1.2示例 SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO, SUM(E.SAL) OVER(PARTITION BY E.DEPTNO) SUM_SAL, --统计某组中的总计值 AVG(E.SAL) OVER(PARTITION BY E.DEPTNO) AVG_SAL, --统计某组中的平均值 COUNT(E.SAL) OVER(PARTITION BY E.DEPTNO) COUNT_SAL --按某列分组,并统计该组中记录数量 FROM EMP E;2.1语法 Pivot函数是将多行聚合并转置为列,每列代表不同范围的聚合数据。新语法的概述如下: SELECT ... FROM ... PIVOT [XML] ( pivot_clause pivot_for_clause pivot_in_clause ) WHERE ... pivot_clause:定义要聚合的列(pivot 是聚合操作);pivot_for_clause:定义要分组和旋转的列;pivot_in_clause:为 pivot_for_clause中的列定义过滤器(即限制结果的值范围)。pivot_in_clause 中每个值的聚合将被转置到单独的列中(在适当的情况下)2.2例子 以Emp表为例,按部门和工作对薪水求和,但将每个部门的总和转移到自己的列中。在我们调整工资之前,我们将检查基础数据,如下所示: SQL> SELECT job 2 , deptno 3 , SUM(sal) AS sum_sal 4 FROM emp 5 GROUP BY 6 job 7 , deptno 8 ORDER BY 9 job 10 , deptno; JOB DEPTNO SUM_SAL --------- ---------- ---------- ANALYST 20 6600 CLERK 10 1430 CLERK 20 2090 CLERK 30 1045 MANAGER 10 2695 MANAGER 20 3272.5 MANAGER 30 3135 PRESIDENT 10 5500 SALESMAN 30 6160 9 rows selected.对于每个职位,我们把部门进行行转列,让所有部门变成了列,显示工资总额,这样的数据相比较上面的数据更加简洁直观,如下所示: SQL> WITH pivot_data AS ( 2 SELECT deptno, job, sal 3 FROM emp 4 ) 5 SELECT * 6 FROM pivot_data 7 PIVOT ( 8 SUM(sal) -- |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |